import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

# 1. 读取原始图片和替换图片
face = Image.open('face.png')  # 原始图片
th = Image.open('th.png')      # 要替换的头部图片

# 转换为NumPy数组
im_face = np.array(face)
im_th = np.array(th)

# 2. 检查图片尺寸
print("原始图片尺寸:", im_face.shape)  # (height, width, channels)
print("替换图片尺寸:", im_th.shape)    # 需确保能覆盖头部区域

# 3. 定义头部区域（示例：截取上半部分）
head_top, head_bottom = 0, im_face.shape[0] // 2  # 截取上半部分1/3
head_left, head_right = im_face.shape[1] // 5, 4 * im_face.shape[1] // 5 # 居中宽度

# 4. 调整替换图片大小以匹配头部区域
from PIL import ImageOps
th_resized = ImageOps.fit(th, (head_right - head_left, head_bottom - head_top))
im_th = np.array(th_resized)

# 5. 替换头部区域
im_face[head_top:head_bottom, head_left:head_right] = im_th

# 6. 显示和保存结果
plt.imshow(im_face)
plt.title("替换头部后的图片")
plt.axis('off')
plt.show()

# 保存结果
Image.fromarray(im_face).save('face_with_th_head.png')